package com.ld.control.business.process.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ld.control.business.process.model.ProcessExampleModel;
import com.ld.control.business.process.vo.resp.AllProcessExampleRespVo;
import com.ld.control.business.process.vo.resp.ProcessExampleDetailsRespVo;

import java.util.List;

/**
 * <p>
 * 任务流程实例 服务类
 * </p>
 *
 * @author wangfeng
 * @since 2024-05-21
 */
public interface ProcessExampleService extends IService<ProcessExampleModel> {

    /**
     * 添加普通流程实例并返回添加成功的流程实例id
     * @param taskTmpId
     * @return
     */
    List<Long> addOrdinaryProcess(Long taskExampleId, Long subTaskExampleId, Long taskTmpId);

    /**
     * 添加初始化结束流程实例
     * @param taskTmpId
     * @return
     */
    List<Long> addInitAndEndProcess(Long taskExample, Long taskTmpId);


    /**
     * 运行初始化流程
     * @param taskExampleId
     * @return
     */
    Boolean runInitProcessExample(Long taskExampleId);

    /**
     * 运行结束流程
     * @param processNodeExampleModelId
     * @return
     */
    Boolean runEndProcessExample(Long processNodeExampleModelId);

    /**
     * 执行下一个普通流程实例，如果没有下一个流程实例则返回false
     * @param processNodeExampleId
     * @return
     */
    Boolean runNextProcessExample(Long processNodeExampleId);

    /**
     * 修改流程实例的状态
     * @param id
     * @param status
     */
    void updateStatus(Long id, Integer status);

    /**
     * 查询子任务下面第一个普通流程
     * @param subTaskExampleId
     * @return
     */
    ProcessExampleModel getFirstProcessExample(Long subTaskExampleId);

    /**
     * 根据子任务实例获取普通流程+初始化流程+结束流程
     * @param subTaskExampleId
     * @return
     */
    AllProcessExampleRespVo getBySubTaskExampleId(Long subTaskExampleId);

    /**
     * 获取流程详情
     * @return
     */
    ProcessExampleDetailsRespVo getDetails(Long id);

}
